#ifndef HMS_MESH_ENUMS_HPP
#define HMS_MESH_ENUMS_HPP

namespace hms
{

enum class WhichCells
{
	all,
	domain,
	ghost,
};

/**
 * @brief Structured meshes are defined by a regular topology that has exactly
 * four boundaries.
 * These are named bottom, top, left and right and correspond to the respective
 * location in a cartesian x-y-coordinate system. For StructMesh types, they
 * correspond to the respective location if said mesh were transformed into a
 * rectangular mesh.
 * 
 */
enum class BoundaryLocation{
	bottom = 0,
	left,
	right,
	top,
};

enum Corner {
	bottomLeft = 0,
	bottomRight,
	topLeft,
	topRight,
	nCorners
};


/**
 * @brief Edge indexing is carried out according to edge ranges. Within each
 * EdgeRange, the edge indices are continuous. There is no overlap between
 * ranges and all edges belong to exactly one EdgeRange.
 * 
 * Edge ranges have a clear topological meaning. E.g. an edge belonging to
 * EdgeRange::horizontal connects two vertices whose indices are exactly 1 apart.
 * 
 */
enum class EdgeRange {
	horizontal,
	vertical,
	undefined,
};

} // namespace hms

#endif